import { IPSModelObject } from '../../ipsmodel-object';
import { IPSModelSortable } from '../../ipsmodel-sortable';
import { IPSCodeList } from '../../codelist/ipscode-list';
import { IPSDEField } from './ipsdefield';
import { IPSDEFieldBase } from './ipsdefield-base';
import { IPSLanguageRes } from '../../res/ipslanguage-res';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEFGroupDetail
 */
export interface IPSDEFGroupDetail extends IPSModelSortable, IPSModelObject, IPSDEFieldBase {
  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 代码名称2
   * @type {string}
   */
  codeName2: string;

  /**
   * 成员参数
   * @type {string}
   */
  detailParam: string;

  /**
   * 成员参数2
   * @type {string}
   */
  detailParam2: string;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源
   *
   * @type {IPSLanguageRes}
   */
  get lNPSLanguageRes(): IPSLanguageRes | null;

  /**
   * 逻辑名称语言资源（必须存在）
   *
   * @type {IPSLanguageRes}
   */
  getLNPSLanguageResMust(): IPSLanguageRes;

  /**
   * 中文名称
   * @type {string}
   */
  logicName: string;

  /**
   * 排序值
   * @type {number}
   * @default 99999
   */
  orderValue: number;

  /**
   * 系统代码表
   *
   * @type {IPSCodeList}
   */
  getPSCodeList(): IPSCodeList | null;

  /**
   * 系统代码表
   *
   * @type {IPSCodeList}
   */
  get psCodeList(): IPSCodeList | null;

  /**
   * 系统代码表（必须存在）
   *
   * @type {IPSCodeList}
   */
  getPSCodeListMust(): IPSCodeList;

  /**
   * 实体属性
   *
   * @type {IPSDEField}
   */
  getPSDEField(): IPSDEField | null;

  /**
   * 实体属性
   *
   * @type {IPSDEField}
   */
  get psDEField(): IPSDEField | null;

  /**
   * 实体属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getPSDEFieldMust(): IPSDEField;

  /**
   * 字符串长度
   * @type {number}
   * @default 0
   */
  stringLength: number;

  /**
   * 允许空输入
   * @type {boolean}
   * @default true
   */
  allowEmpty: boolean;

  /**
   * 支持用户输入
   * @type {boolean}
   */
  enableUserInsert: boolean;

  /**
   * 支持用户更新
   * @type {boolean}
   */
  enableUserUpdate: boolean;
}
